/*
 * @author: wangshuaixue
 * @Date: 2024-10-08 17:09:14
 * @description:
 * @LastEditTime: 2025-04-11 17:23:09
 * @LastEditors: wangshuaixue
 * @FilePath: /sqlsearch/vite.config.ts
 */
/// <reference types="vitest" />

import { type ConfigEnv, type UserConfigExport, loadEnv } from "vite"
import path, { resolve } from "path"
import vue from "@vitejs/plugin-vue"
import vueJsx from "@vitejs/plugin-vue-jsx"
import { createSvgIconsPlugin } from "vite-plugin-svg-icons"
import svgLoader from "vite-svg-loader"
import { prismjsPlugin } from "vite-plugin-prismjs"
import legacy from "@vitejs/plugin-legacy"

/** 配置项文档：https://cn.vitejs.dev/config */
export default ({ mode }: ConfigEnv): UserConfigExport => {
  const viteEnv = loadEnv(mode, process.cwd()) as ImportMetaEnv
  const { VITE_PUBLIC_PATH } = viteEnv
  return {
    /** 打包时根据实际情况修改 base */
    base: VITE_PUBLIC_PATH,
    resolve: {
      alias: {
        /** @ 符号指向 src 目录 */
        "@": resolve(__dirname, "./src")
      }
    },
    server: {
      /** 设置 host: true 才可以使用 Network 的形式，以 IP 访问项目 */
      host: "0.0.0.0", // host: "0.0.0.0"
      /** 端口号 */
      port: 3000,
      /** 是否自动打开浏览器 */
      open: false,
      /** 跨域设置允许 */
      cors: true,
      /** 端口被占用时，是否直接退出 */
      strictPort: false,
      /** 接口代理 */
      proxy: {
        "/backend": {
          // 这里填写后端地址
          // target: "http://192.168.30.101:8088",
          target: "http://192.168.50.147:8088",
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/backend/, "")
        }
        // "/backend": {
        //   target: "http://192.168.50.107:8088",
        //   ws: true,
        //   pathRewrite: { "^/backend": "" },
        //   /** 是否允许跨域 */
        //   changeOrigin: true
        // }
        // "/api/v1": {
        //   target: "https://mock.mengxuegu.com/mock/63218b5fb4c53348ed2bc212",
        //   ws: true,
        //   /** 是否允许跨域 */
        //   changeOrigin: true
        // }
      },
      /** 预热常用文件，提高初始页面加载速度 */
      warmup: {
        clientFiles: ["./src/layouts/**/*.vue"]
      }
    },
    build: {
      target: "es2015"
      /** 单个 chunk 文件的大小超过 2048KB 时发出警告 */
      // chunkSizeWarningLimit: 2048,
      // /** 禁用 gzip 压缩大小报告 */
      // reportCompressedSize: false,
      // /** 打包后静态资源目录 */
      // assetsDir: "static",
      // rollupOptions: {
      //   output: {
      //     /**
      //      * 分块策略
      //      * 1. 注意这些包名必须存在，否则打包会报错
      //      * 2. 如果你不想自定义 chunk 分割策略，可以直接移除这段配置
      //      */
      //     manualChunks: {
      //       vue: ["vue", "vue-router", "pinia"],
      //       element: ["element-plus", "@element-plus/icons-vue"],
      //       vxe: ["vxe-table", "vxe-table-plugin-element", "xe-utils"]
      //     }
      //   }
      // }
    },
    /** Vite 插件 */
    plugins: [
      vue(),
      vueJsx(),
      /** 将 SVG 静态图转化为 Vue 组件 */
      svgLoader({ defaultImport: "url" }),
      /** SVG */
      createSvgIconsPlugin({
        iconDirs: [path.resolve(process.cwd(), "src/icons/svg")],
        symbolId: "icon-[dir]-[name]"
      }),
      prismjsPlugin({
        languages: "all",
        plugins: ["line-numbers", "copy-to-clipboard"], //官网有其他功能,这里开启行数和复制按钮功能
        theme: "okaidia",
        css: true
      }),
      legacy({
        targets: ["defaults", "ie >= 11", "chrome 69", "Chrome >= 49"], //需要兼容的目标列表，可以设置多个
        additionalLegacyPolyfills: ["regenerator-runtime/runtime"],
        renderLegacyChunks: true,
        polyfills: [
          "es.promise.all-settled",
          "es.object.entries",
          "es.symbol",
          "es.array.filter",
          "es.promise",
          "es.promise.finally",
          "es/map",
          "es/set",
          "es.array.for-each",
          "es.object.define-properties",
          "es.object.define-property",
          "es.object.get-own-property-descriptor",
          "es.object.get-own-property-descriptors",
          "es.object.keys",
          "es.object.to-string",
          "web.dom-collections.for-each",
          "esnext.global-this",
          "esnext.string.match-all"
        ],
        modernPolyfills: ["es.promise.all-settled", "es.object.entries"]
      })
    ]
  }
}
